package com.wpre.blogsystem.common.utils;

import com.wpre.blogsystem.exception.BlogException;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: LianBao
 * Date: 2024-12-07
 * Time: 16:11
 */
public class SecurityUtil {
    /**
     * 加密
     */
    public static String encrypt(String password) {
        if (!StringUtils.hasLength(password)) {
            throw new BlogException("密码不能为空");
        }
        //1.生成盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        //2.盐值+password
        //3.对 盐值+password 进行加密 得到密文
        String securityPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes(StandardCharsets.UTF_8));
        //数据库中保存盐值 和 密文 得到64位16进制的数据
        return salt + securityPassword;

    }


    /**
     * 验证
     */
    public static boolean verify(String inputPassword, String sqlPassword) {
        //参数校验
        if (!StringUtils.hasLength(inputPassword) || !StringUtils.hasLength(sqlPassword)) {
            return false;
        }
        if (sqlPassword.length() != 64) {
            return false;
        }
        //获取盐值
        String salt = sqlPassword.substring(0, 32);

        //得到32位的密文
        String securityPassword = DigestUtils.md5DigestAsHex((salt + inputPassword).getBytes(StandardCharsets.UTF_8));
        return sqlPassword.equals(salt + securityPassword);

    }


}
